package com.nnnu.wsnackshop.service;

import com.nnnu.wsnackshop.pojo.dto.LoginDTO;
import com.nnnu.wsnackshop.pojo.dto.PhoneLoginDTO;
import com.nnnu.wsnackshop.pojo.dto.SendSmsCodeDTO;
import com.nnnu.wsnackshop.pojo.dto.WechatLoginDTO;
import com.nnnu.wsnackshop.pojo.dto.WechatPhoneLoginDTO;
import com.nnnu.wsnackshop.pojo.vo.CouponVO;
import com.nnnu.wsnackshop.pojo.vo.WechatLoginVO;

import java.util.List;

public interface AuthService {
    String login(LoginDTO loginDTO);

    /**
     * 微信登录（通过code获取openid）
     * 
     * @param wechatLoginDTO
     * @return
     */
    WechatLoginVO wechatLogin(WechatLoginDTO wechatLoginDTO);

    /**
     * 微信手机号登录（通过code获取手机号）
     * 
     * @param wechatPhoneLoginDTO
     * @return
     */
    WechatLoginVO wechatPhoneLogin(WechatPhoneLoginDTO wechatPhoneLoginDTO);

    /**
     * 为新用户自动发放优惠券
     * 
     * @param userId 用户ID
     * @return 发放的优惠券列表
     */
    List<CouponVO> issueNewUserCoupons(Integer userId);

    /**
     * 在独立事务中处理新人优惠券发放
     * 
     * @param userId 用户ID
     * @return 发放的优惠券列表
     */
    List<CouponVO> processNewUserCoupons(Integer userId);

    /**
     * 发送短信验证码
     * 
     * @param sendSmsCodeDTO 发送短信验证码DTO
     * @return 是否成功
     */
    boolean sendSmsCode(SendSmsCodeDTO sendSmsCodeDTO);

    /**
     * 手机号验证码登录
     * 
     * @param phoneLoginDTO 手机号验证码登录DTO
     * @return 登录结果
     */
    WechatLoginVO phoneLogin(PhoneLoginDTO phoneLoginDTO);

    /**
     * 仅获取微信openid，不执行登录
     * 
     * @param code 微信授权码
     * @return openid
     */
    String getWechatOpenid(String code);

    /**
     * 刷新token
     * 
     * @param oldToken 原token
     * @return 新token，如果原token无效则返回null
     */
    String refreshToken(String oldToken);
}
